anywidget-vector¶
Interactive 3D vector visualization for Python notebooks.
Overview¶
anywidget-vector provides 3D visualization for high-dimensional embeddings and vector data. Built on Three.js and the anywidget framework, it works universally across Jupyter, Marimo, VS Code, Colab, and Databricks.
Features¶
6D Visualization¶
Encode six dimensions simultaneously:
- X, Y, Z: 3D position coordinates
- Color: Hue/gradient mapping
- Shape: Geometry types (sphere, cube, etc.)
- Size: Scale/importance
Multi-Backend Support¶
| Side | Backends |
|---|---|
| Browser | Qdrant, Pinecone, Weaviate (REST API) |
| Python | ChromaDB, LanceDB, Grafeo |
Rich Interactivity¶
- Orbit, pan, zoom controls
- Click/hover/selection events
- Programmable camera positioning
- K-nearest neighbor visualization
Installation¶
With optional backends:
Quick Start¶
From NumPy Arrays¶
from anywidget_vector import VectorSpace
import numpy as np
# Generate sample embeddings
embeddings = np.random.randn(1000, 3)
colors = np.random.rand(1000)
widget = VectorSpace(
points=embeddings,
colors=colors,
point_size=0.05
)
widget
From pandas DataFrame¶
import pandas as pd
from anywidget_vector import VectorSpace
df = pd.DataFrame({
"x": np.random.randn(500),
"y": np.random.randn(500),
"z": np.random.randn(500),
"category": np.random.choice(["A", "B", "C"], 500)
})
widget = VectorSpace.from_dataframe(
df,
x="x", y="y", z="z",
color_by="category"
)
widget
From Vector Database¶
from anywidget_vector import VectorSpace
from anywidget_vector.backends import ChromaDBBackend
backend = ChromaDBBackend(
collection_name="embeddings",
path="./chroma_db"
)
widget = VectorSpace(backend=backend)
widget
Distance Metrics¶
Compute and visualize vector relationships:
widget = VectorSpace(
points=embeddings,
distance_metric="cosine", # euclidean, manhattan, dot_product
show_neighbors=5 # K-nearest neighbors
)
Event Handling¶
@widget.on_click
def handle_click(point_index, point_data):
print(f"Clicked point {point_index}: {point_data}")
@widget.on_select
def handle_selection(indices):
print(f"Selected {len(indices)} points")
Configuration¶
widget = VectorSpace(
points=embeddings,
# Appearance
point_size=0.05,
point_shape="sphere", # sphere, cube, octahedron
colormap="viridis",
background_color="#1a1a1a",
# Controls
show_axes=True,
show_grid=True,
enable_selection=True,
# Performance
use_instancing=True, # For 100K+ points
)
Notebook Compatibility¶
Works in any environment supporting anywidget:
- JupyterLab / Jupyter Notebook
- Marimo
- VS Code Notebooks
- Google Colab
- Databricks
Requirements¶
- Python 3.12+
- Modern browser with WebGL support
License¶
Apache-2.0